/*
 * 版权声明 (c) 2025 XXX科技有限公司
 *
 * 本软件及其相关文档文件受版权保护。未经版权所有者明确书面许可，任何单位或个人不得
 * 以任何形式复制、传播、修改、出售、出租、反向工程、反编译或利用本软件的任何部分。
 *
 * 对于任何违反本声明的行为，版权所有者保留追究法律责任的权利。
 */

#ifndef GW_MANAGER_H
#define GW_MANAGER_H

#include <memory>
#include <unordered_map>
#include <vector>
#include "context.h"
#include "module.h"

// #include <iostream>
#include "agent_module.h"
// #include "config.h"
// #include "context.h"
// #include "logger.h"
#include "gateway_module.h"
#include "router_module.h"
#include "sync_module.h"


class Context;

class GwManager {
public:
	GwManager();
	~GwManager();

	// 初始化
	bool Init(const string &config_path);

	// 启动所有模块
	void Launch() const;

private:
	unique_ptr<Context> context;
	vector<unique_ptr<Module>> module_vec;
	unordered_map<string, size_t> module_map;

	// 注册模块
	bool _register(unique_ptr<Module> module);

	// 注销模块
	void _unregister(const string &module_name);
};

#endif // GW_MANAGER_H
